package com.yjz.study

import android.app.Application
import android.widget.Toast
import com.alibaba.android.arouter.BuildConfig
import com.alibaba.android.arouter.launcher.ARouter
import com.google.gson.Gson
import com.yjz.common.callback.ToastCallBack
import com.yjz.common.util.MainHandler
import com.yjz.log.config.JLogConfig
import com.yjz.log.config.JLogConfig.JsonParse
import com.yjz.log.manager.JLogManager
import com.yjz.log.print.console.ConsolePrinter
import com.yjz.log.print.file.FilePrinter

/**
 * 作用 :
 * 作者 : yjz
 * 时间 : 2024/10/24 14:02
 */
class MoocApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        // 初始化日志框架
        initLog()
        // 初始化路由框架
        initARouter()
        // 初始化回调框架
        initCallBack()
    }

    private fun initCallBack() {
        ToastCallBack.toast = { content ->
            MainHandler.post(runnable = {
                Toast.makeText(this, content, Toast.LENGTH_SHORT).show()
            })
        }
    }

    private fun initARouter() {
        if (BuildConfig.DEBUG) {
            ARouter.openLog()
            ARouter.openDebug()
        }

        ARouter.init(this)
    }

    private fun initLog() {
        JLogManager.init(object : JLogConfig() {
            override fun injectJsonParser(): JsonParse {
                return JsonParse { src: Any? -> Gson().toJson(src) }
            }

            // 打印堆栈信息
            override fun includeThread(): Boolean {
                return false
            }

            override fun getGlobalTag(): String {
                return "JLog"
            }
        }, ConsolePrinter(), FilePrinter.getInstance(this.cacheDir.absolutePath, 0))
    }
}
